package com.eltsistemas.dao;

import com.eltsistema.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Fornecedor;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

public class FornecedorDao {
	
    private Session session;
	
    public FornecedorDao()
    {
	session = new HibernateUtil().getSession();
        session.beginTransaction();
    }
	
    public void adiciona(Fornecedor fornecedor)
    {
    	session.save(fornecedor);
	session.getTransaction().commit();
        session.close();
    }
	
    public List<Fornecedor> lista()
    {
        List<Fornecedor> fornecedorList = session.createCriteria(Fornecedor.class).list();
        session.close();
    	return fornecedorList;
    }
	
    public Fornecedor exibe(Fornecedor fornecedor)
    {
	Fornecedor encontradoFornecedor= (Fornecedor) session.load(Fornecedor.class, fornecedor.getId());
	return encontradoFornecedor;
    }
	
    public void altera(Fornecedor fornecedor)
    {
    	session.update(fornecedor);
	session.getTransaction().commit();
        session.close();
    }
	
    public void remover(Fornecedor fornecedor)
    {
    	session.delete(fornecedor);
	session.getTransaction().commit();
        session.close();
    }

    public Fornecedor buscaCodigo(Fornecedor fornecedor)
    {
	Query query = this.session.createQuery("from Fornecedor " +
                	"where razao = :razao or cnpj = :cnpj");
		
	query.setString("razao", fornecedor.getRazao());
        query.setString("cnpj", fornecedor.getCnpj());
				
	Fornecedor encontradoFornecedor = (Fornecedor) query.uniqueResult();
        session.close();
        return encontradoFornecedor;		
    }
    
    public Fornecedor buscaCodigoUp(Fornecedor fornecedor)
    {
	Query query = this.session.createQuery("from Fornecedor " +
                	"where (razao = :razao or cnpj = :cnpj) and (id != :id) ");
		
	query.setString("razao", fornecedor.getRazao());
        query.setString("cnpj", fornecedor.getCnpj());
        query.setLong("id", fornecedor.getId());
			  
	Fornecedor encontradoFornecedor = (Fornecedor) query.uniqueResult();
        session.close();
        return encontradoFornecedor;		
    }
    
}
